Hi,大家好,今天是第5天,本日要接續昨天的資料庫部份,首先,先補充昨天尚未說完的資料庫的元件,下列是常用的資料庫元件,但是因為這次不打算用,所以只是快速的帶過而已
中文通常叫做視觀表,其實就是把SQL語法的執行結果變成一個虛擬的表格,可以針對view再進行資料查詢,算是很方便的東西,主要有2個用
中文叫做觸發器(早期有的書用機翻翻成板機,讓人傻眼@@),可設定資料表在新增資料、刪除資料、修改資料時,需要進行什麼動作(例如說新增時同時新增其他表格,刪除前自動將該筆資料複製到別的地方以進行資料備份…等功能
中文叫做預存程序,其實就是在資料庫中寫程式,是屬於資料庫的高階用法,讓資料庫不只是資料庫的東西XD,可以做到邏輯判斷、迴圈控制、排程作業等等需要開發程式才可以達到的功能,各家資料庫均有自己的預存程序語言,例如 SQL Server 的T-SQL、Oracle 的 plsql、PostgreSQL的ps/sql…等,會用的話可以讓資料庫做很多事,且若是和外部程式,例如java、c#相比,因為預存程序本身是在資料庫內部執行讀寫功能,同樣的資料吞吐量的話,預存程序的效能遠比用外部程式還好。
接下來進入本日的主題,資料庫的規劃,一般我在規劃資料庫時,會在訪談時索取紙本的表單,針對表單來分析與建立資料表,並製作SQL 文件與繪製實體關聯圖,但是這次的side畢竟全憑想象,所以就自己定議表格啦 XD
上圖就是初步規劃的實體關聯圖,如圖所示,目前預計以一個表格存放客服通報紀錄,每筆客服報有若千筆處理紀錄,以CASEID/MAINID建立關聯;每個使用者可輸入若干次處理紀錄
建立資料表時,使用SQL語法進行建立,並保留,這個動作最大的用意是若是要進行環境移植、重建時,有SQL就可以輕易重建了 不用到時候兵慌馬亂時還要找來找去,建立資料表時使用的是 CREATE TABLE 語法,其語法規則為
CREATE TABLE 資料表名稱 (
欄位名稱#1 資料型態,
欄位名稱#2 資料型態,…
CONSTRAINT 主鍵值名稱 PRIMARY KEY (主鍵值欄位)
);
若資料型態後方加入「NOT NULL」,表示該欄位不得為空
若加入 DEFAULT XXX,表示該欄位預設值為XXX
建立資料表的SQL語法如下
CREATE TABLE CASES (
CASEID VARCHAR(40) NOT NULL, -- 主鍵,預計以UUID存放
FROMPER VARCHAR(40), -- 通報人名稱
FROMMAIL VARCHAR(30), -- 通報人信箱
FROMTEL VARCHAR(60), -- 通報人電話
SYSTEMID VARCHAR(5), -- 通報問題系統編號
LOGDATE DATE, -- 通報日期
CASESTATUS VARCHAR(2) DEFAULT '00', -- 處理情形 00:未處理 01:後送處理中 02:後送完成 10:結案
DIELINE DATE, -- 完成期限
FINISHDATE DATE, -- 完成日期
CONSTRAINT CASES_PK PRIMARY KEY (CASEID)
);
CREATE TABLE CIRCUIT (
CASEID VARCHAR(40) NOT NULL, -- 流程編號
MAINID VARCHAR(40) NOT NULL, -- 通報紀錄編號
USERID VARCHAR(20) NOT NULL, -- 處理人員帳號
FLOWDESC VARCHAR(20) NOT NULL, -- 流程說明
FLOWMEMO VARCHAR(200), -- 備註
STATUS VARCHAR(2) DEFAULT '00', -- 執行狀態 00 - 執行中 01 - 執行完畢
FLOWSDATE DATE, -- 開始執行日期
FLOWEDATE DATE -- 完成日期
CONSTRAINT CIRCUIT_PK PRIMARY KEY (FLOWID)
);
-- 建立外鍵,連接至 CASES 的 CASEID 欄位,並設定 CASES 資料修改或刪除時,CIRCUIT 會跟著動
ALTER TABLE CIRCUIT
ADD CONSTRAINT CIRCUIT_FK FOREIGN KEY (MAINID)
REFERENCES CASES (CASEID) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE;
CREATE TABLE USERS (
USERID VARCHAR(20) NOT NULL, -- 使用者帳號
PWDSTR VARCHAR(500) NOT NULL, -- 密碼欄位(存放加密密文)
USERLEV INTEGER NOT NULL, -- 權限等級 0:最低 99: 最高
LOCKED VARCHAR(1) DEFAULT 'N', -- 帳號已鎖定(連續登入失敗或異常行為可進行鎖定)
LOCKLIMIT DATE, -- 帳號鎖定開放時間
DELETED VARCHAR(1) DEFAULT 'N', -- 帳號已刪除
USERSDT DATE, -- 帳號啟用時間
USEREDT DATE -- 帳號停用時間
CONSTRAINT USERS_PK PRIMARY KEY (USERID)
);
今天完成了資料表的建立,並簡單的說明建立表格用的 sql 語法,create table 只是sql 的一小部份而已,明天會開始進行程式的撰寫,在撰寫過程中,會針對會用到的 select、insert、updte、delete 進行教學,目前預計明天會開始進行 node.js 的開發了